﻿using System;

namespace ObserverAndMediator
{
    /// <summary>
    /// 工廠類
    /// </summary>
    public class ProductManager
    {
        /// <summary>
        /// 是否可以創建一個產品
        /// </summary>
        private bool isPermittedCreate = false;

        /// <summary>
        /// 建立一個產品
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public Product createProduct(string name) {
            //首先修改權限，允許創建
            isPermittedCreate = true;
            Product p = new Product(this, name);

            new ProductEvent(p, ProductEventType.NEW_PRODUCT);
            return p;
        }

        /// <summary>
        /// 廢棄一個產品
        /// </summary>
        /// <param name="p"></param>
        public void abandonProduct(Product p) {

            new ProductEvent(p, ProductEventType.DEL_PRODUCT);
            //銷毀一個產品，例如刪除數據庫記錄
            p = null;
        }

        /// <summary>
        /// 修改一個產品
        /// </summary>
        /// <param name="p"></param>
        /// <param name="name"></param>
        public void editProduct(Product p, string name)
        {
            //修改後的產品
            p.Name = name;

            new ProductEvent(p, ProductEventType.EDIT_PRODUCT);
        }

        /// <summary>
        /// 獲得是否可以創建一個產品
        /// </summary>
        /// <returns></returns>
        public bool isCreateProduct()
        {
            return isPermittedCreate;
        }

        /// <summary>
        /// 克隆一個產品
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public Product clone(Product p) {

            new ProductEvent(p, ProductEventType.CLONE_PRODUCT);
            //產生克隆事件
            return (Product)p.Clone();
        }
    }
}